/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package repol190.viatura;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import repol190.ocorrencia.Endereco;
import repol190.ocorrencia.Ocorrencia;
import repol190.ocorrencia.RepositorioEnderecoDataBase;
import repol190.ocorrencia.RepositorioOcorrenciaDataBase;
import repol190.util.ConexaoBD;

/**
 *
 * @author micael
 */
public class RepositorioViaturaDataBase implements RepositorioViatura{
    
    private Connection con;

  

    @Override
    public void inserirViatura(Viatura novaViatura) {
        
         con = new ConexaoBD().abrirConexao();
        
        String sql = "insert into viatura (placa, status, policiais_quantidade, "
                + "id_endereco) values (?, ?, ?, ?)";
        int i;
       
        try {
            PreparedStatement comando = con.prepareStatement(sql);
            
            comando.setString(1, novaViatura.getPlaca());
            comando.setInt(2, novaViatura.getStatus());
            comando.setInt(3, novaViatura.getQtdePoliciais());
            //comando.setInt(4, novaViatura.getOcorrencia().getId());
            comando.setInt(4, novaViatura.getEndereco().getId());
            
            comando.execute();
            comando.close();
            con.close();
        } catch (SQLException ex) {
            Logger.getLogger(RepositorioViaturaDataBase.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        
    }

    @Override
    public void excluirViatura(String placa) {
        con = new ConexaoBD().abrirConexao();
      
        String sql = "delete from viatura where placa=?";
        
        try {
            PreparedStatement comando = con.prepareStatement(sql);
            
            comando.setString(1, placa);
            
            comando.execute();
            comando.close();
            con.close();
        } catch (SQLException ex) {
            Logger.getLogger(RepositorioViaturaDataBase.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public Viatura buscaViatura(String placa) {
          con = new ConexaoBD().abrirConexao();
          
          Viatura viatura = null;
          Endereco endereco = null;
          Ocorrencia ocorrencia = null;
          RepositorioOcorrenciaDataBase ocorrencias = new RepositorioOcorrenciaDataBase();
          RepositorioEnderecoDataBase enderecos = new RepositorioEnderecoDataBase();
          
          ResultSet rs = null;
      
        String sql = "select * from viatura where placa="+placa;
        
        try {
            PreparedStatement comando = con.prepareStatement(sql);
            
            rs = comando.executeQuery();
            
       
            if(rs.next()){
                
                endereco = enderecos.buscaEndereco(rs.getInt("id_endereco"));
                ocorrencia = ocorrencias.buscaOcorrencia(rs.getInt("id_ocorrencia"));
                
                viatura = new Viatura(rs.getString("placa"), rs.getInt("status"),
                        rs.getInt("policiais_quantidade"), endereco, ocorrencia);
            }
            
            comando.close();
            rs.close();
            con.close();
        } catch (SQLException ex) {
            Logger.getLogger(RepositorioViaturaDataBase.class.getName()).log(Level.SEVERE, null, ex);
        }
        
 
        
        return viatura;
    }

    @Override
    public void atualizarViatura(Viatura viatura) {
        con = new ConexaoBD().abrirConexao();

        String sql = "update viatura set status=? policiais_quantidade=?"
                + "id_ocorrencia=? id_endereco=? where placa=?";
        try {
            PreparedStatement comando = con.prepareStatement(sql);
            
            comando.setInt(1, viatura.getStatus());
            comando.setInt(2, viatura.getQtdePoliciais());
            comando.setInt(3, viatura.getOcorrencia().getId());
            comando.setInt(4, viatura.getEndereco().getId());
            comando.setString(5, viatura.getPlaca());
            
            comando.execute();
            
            comando.close();
            con.close();
            
        } catch (SQLException ex) {
            Logger.getLogger(RepositorioViaturaDataBase.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public Collection<Viatura> listarViaturas() {
            
         con = new ConexaoBD().abrirConexao();

        Vector<Viatura> resp = new Vector<Viatura>();
        
        Endereco endereco = null;
        Ocorrencia ocorrencia = null;
        RepositorioOcorrenciaDataBase ocorrencias = new RepositorioOcorrenciaDataBase();
        RepositorioEnderecoDataBase enderecos = new RepositorioEnderecoDataBase();
        Viatura viatura = null;
        ResultSet rs = null;
        
        String sql = "select * from viatura";

        try {
            PreparedStatement comando = con.prepareStatement(sql);
            rs = comando.executeQuery();

            while (rs.next()) {
                
                endereco = enderecos.buscaEndereco(rs.getInt("id_endereco"));
                ocorrencia = ocorrencias.buscaOcorrencia(rs.getInt("id_ocorrencia"));
                
                viatura = new Viatura(rs.getString("placa"), rs.getInt("status"), 
                        rs.getInt("policiais_quantidade"), endereco, ocorrencia);
                resp.add(viatura);
            }

            comando.close();
            rs.close();
            con.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return resp;
    }
    
}
